/****************************************************************************/
/* File: scs-actions.h                                                      */
/* Desc: Specification file for the input action set type                   */
/* Created: 2014-11-15                                                      */
/* Revised: 2014-11-17                                                      */
/* Authors: Sterling P. de Mille                                            */
/****************************************************************************/

// include once
#ifndef SCS_ACTIONS_H_
#define SCS_ACTIONS_H_

// core data types
#include "../Core/scs-types.h"
// input action type
#include "scs-action.h"
// input keyboard type
#include "scs-keyboard.h"
// input mouse type
#include "scs-mouse.h"
// input controller type
#include "scs-controller.h"

// data set support
#include <set>
// data map support
#include <map>

using namespace std;

// input action set type
class SCSactions {
protected:

	set<SCSaction*> m_kActionSet;
	map<SCSint32u, SCSaction*> m_kKeyboardMappings;
	map<SCSint32u, SCSaction*> m_kMouseMappings;
	map<SCSint32u, SCSaction*> m_kControllerMappings;

	void UpdateActions ();
	void UpdateKeyboard ();
	void UpdateMouse ();
	void UpdateController ();

public:

	SCSactions ();
	~SCSactions ();

	void MapInputAction (SCSint32u iInputEvent, SCSaction* pkActionMapping);
	void MapKeyboardAction (SCSint32u iInputEvent, SCSaction* pkActionMapping);
	void MapMouseAction (SCSint32u iInputEvent, SCSaction* pkActionMapping);
	void MapControllerAction (SCSint32u iInputEvent, SCSaction* pkActionMapping);

	void Update ();
};

#endif // _SCS_ACTIONS_H_
